package com.hsgene.order.service;

import com.hsgene.common.util.result.ApiResult;
import com.hsgene.common.util.result.NullObject;
import com.hsgene.order.domain.applets.*;
import com.hsgene.order.domain.v1.GeneticTestingOrderPayment;

import java.util.List;

public interface AppletsOrderService {

    /**
     * 提交订单
     *
     * @param orderSubmitInfoDto 提交数据信息
     */
    String submitOrder(AppletsOrderSubmitInfoDto orderSubmitInfoDto);

    /**
     * 付款更新订单
     *
     * @param paymentInfo 订单id
     * @return
     */
    Boolean payUpdate(GeneticTestingOrderPayment paymentInfo);

    /**
     * 校验订单套餐是否失效
     *
     * @param orderId 订单id
     * @return
     */
    List<AppletsOrderPackageInfoDto> checkOrderPackage(String orderId);

    /**
     * 获取订单列表信息
     *
     * @param userId      用户id
     * @param orderStatus 订单状态
     * @param page
     * @param size
     * @return
     */
    AppletsListInfoDto getOrderList(String userId, String orderStatus, Integer page, Integer size);

    /**
     * 取消订单
     *
     * @param cancerInfoDto 取消信息
     * @return
     */
    Boolean orderCancer(AppletsOrderCancerInfoDto cancerInfoDto);

    /**
     * 校验订单是否有效
     *
     * @param orderId 订单id
     * @param status  状态
     * @return
     */
    Integer checkOrderIsEffect(String orderId, Integer status);

    /**
     * 添加评论
     *
     * @param commentInfoDto 评论信息
     */
    void orderComment(AppletsOrderCommentInfoDto commentInfoDto);

    /**
     * 用户订单
     *
     * @param orderId 订单id
     * @param userId  用户id
     * @param status  状态
     * @return
     */
    Integer checkUserOrder(String orderId, String userId, Integer status);

    /**
     * 获取订单详情
     *
     * @param orderId 订单id
     * @return
     */
    AppletsOrderDetailsInfoDto getOrderDetails(String orderId);

    /**
     * 订单确认收货
     *
     * @param userId  用户id
     * @param orderId 订单id
     * @return 确认收货结果
     */
    ApiResult<NullObject> confirmOrderReceipt(String userId, String orderId);

    /**
     * 获取列表统计信息
     * @param userId 用户id
     * @return
     */
    List<AppletsOrderTypeInfo> getOrderTypeInfo(String userId);
}
